/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EpicrisisInternacionPresentacion.java
 *
 * Created on 08/11/2010, 14:34:44
 */

package presentacion.evolucion;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.Cie9mc;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.EpicrisisInternacion;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.SpinnerDateModel;
import logica.CapaLogica;
import logica.EpicrisisInternacionLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.GestionPacientePresentacion;
import presentacion.MenuPrincipal;
import presentacion.acceso.RestriccionAcceso;
import presentacion.cie9mc.GestionCie9mcPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;

/**
 *
 * @author Gonzalo
 */
public class EpicrisisInternacionPresentacion extends javax.swing.JDialog {

    /** Creates new form EnfermedadYDiagnosticoAmbulatorioPresentacion */
    public EpicrisisInternacionPresentacion(
            java.awt.Frame parent, boolean modal,
            DiagnosticoYTriageInternacion unDiagnosticoYTriageInternacion) {

        super(parent, modal);

        diagnosticoYTriageInternacion = unDiagnosticoYTriageInternacion;

        initComponents();
        personalizarGUI();
        setearEventosQueCapturanTeclaEnterYEscape();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarEpicrisisInternacion(this));
        
        if (CapaPresentacion.modoCarga) {
            modoCarga();
        } else if (CapaPresentacion.modoModificacion) {
            modoModificacion();
        } else if (CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
    }

    /**
     * Setea la ventana en modo carga.
     * 
     */
    private void modoCarga() {
        horaEpicrisisInternacion.getModel().setValue(new Date());
        fechaEpicrisisInternacion.setDate(new Date());

        textoApellidoNombreProfesional.setText("Evoluciona: " +
            MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona() +
            ", " +
            MenuPrincipal.usuarioActivo.getPersona().getNombrePersona());
    }

    /**
     * Setea la ventana en modo modificación.
     *
     */
    private void modoModificacion() {
        exhibirDatosEnPantalla(
                diagnosticoYTriageInternacion.getEpicrisisInternacion());

        horaEpicrisisInternacion.getModel().setValue(new Date());
        fechaEpicrisisInternacion.setDate(new Date());

        textoApellidoNombreProfesional.setText("Evoluciona: " +
            MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona() +
            ", " +
            MenuPrincipal.usuarioActivo.getPersona().getNombrePersona());
    }

    /**
     * Setea la ventana en modo visualización.
     *
     */
    private void modoVisualizacion() {
        exhibirDatosEnPantalla(
                diagnosticoYTriageInternacion.getEpicrisisInternacion());
        
        setearEstadoCampos(false);
        botonCancelar.requestFocus();
        CapaPresentacion.personalizarBotonesEnVisualizacion(textoDescriptivoVentana,
                botonAceptar, botonCancelar);
    }

    /**
     * Permite visualizar los detalles de la epicrisis.
     *
     * @param epicrisisInternacion La epicrisis a visualizar
     */
    private void exhibirDatosEnPantalla(EpicrisisInternacion epicrisisInternacion) {
        String horaEnString = epicrisisInternacion.
                getHoraEpicrisisInternacion();
        horaEpicrisisInternacion.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        fechaEpicrisisInternacion.setDate(epicrisisInternacion.
                getFechaEpicrisisInternacion());
        nombreEnfermedadEpicrisisInternacion.setText("(" +
                    epicrisisInternacion.getCie9mc().getCodigoCie9mc() + ") " +
                    epicrisisInternacion.getCie9mc().getDetalleCie9mc());
        nombreEnfermedadEpicrisisInternacion.setToolTipText(
                nombreEnfermedadEpicrisisInternacion.getText());
        cie9mcSeleccionado = epicrisisInternacion.getCie9mc();
        informacionComplementariaEpicrisisInternacion.setText(
                epicrisisInternacion.getInformacionComplementariaEpicrisisInternacion());
        informacionComplementariaEpicrisisInternacion.setCaretPosition(0);
        textoApellidoNombreProfesional.setText("Evolucionó: " +
                diagnosticoYTriageInternacion.getEpicrisisInternacion().
                getApellidoProfesionalEpicrisisInternacion() + ", " +
                diagnosticoYTriageInternacion.getEpicrisisInternacion().
                getNombreProfesionalEpicrisisInternacion());
    }

    /**
     * Setea el estado de la propiedad enabled de todos los campos de ingreso.
     *
     * @param estado El estado a setear
     */
    private void setearEstadoCampos(boolean estado) {
        horaEpicrisisInternacion.setEnabled(estado);
        fechaEpicrisisInternacion.setEnabled(estado);
        botonEnfermedadEpicrisisInternacion.setEnabled(estado);
        informacionComplementariaEpicrisisInternacion.setEnabled(estado);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        panelEpicrisis = new javax.swing.JPanel();
        textoHoraYFechaEpicrisisInternacion = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaEpicrisisInternacion = new javax.swing.JSpinner(spinerModel);
        fechaEpicrisisInternacion = new com.toedter.calendar.JDateChooser();
        textoApellidoNombreProfesional = new javax.swing.JLabel();
        botonEnfermedadEpicrisisInternacion = new javax.swing.JButton();
        nombreEnfermedadEpicrisisInternacion = new javax.swing.JLabel();
        textoInformacionComplementariaEpicrisisInternacion = new javax.swing.JLabel();
        informacionComplementariaEpicrisisInternacionScrollPanel = new javax.swing.JScrollPane();
        informacionComplementariaEpicrisisInternacion = new javax.swing.JTextArea();
        botonCancelar = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Epicrisis de la Internación");
        setMinimumSize(new java.awt.Dimension(816, 728));
        setResizable(false);

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Ingrese la información de la internación");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(612, 20));

        panelEpicrisis.setMinimumSize(new java.awt.Dimension(0, 0));

        textoHoraYFechaEpicrisisInternacion.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaEpicrisisInternacion.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaEpicrisisInternacion.setText("Hora y fecha");
        textoHoraYFechaEpicrisisInternacion.setPreferredSize(new java.awt.Dimension(135, 20));

        fechaEpicrisisInternacion.setToolTipText("");
        fechaEpicrisisInternacion.setDate(new Date());
        fechaEpicrisisInternacion.setMaxSelectableDate(new Date());
        fechaEpicrisisInternacion.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaEpicrisisInternacion.setPreferredSize(new java.awt.Dimension(144, 20));

        textoApellidoNombreProfesional.setFont(Fuente.FUENTE_LABEL);
        textoApellidoNombreProfesional.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoNombreProfesional.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        textoApellidoNombreProfesional.setText("<Profesional que evoluciona>");
        textoApellidoNombreProfesional.setPreferredSize(new java.awt.Dimension(315, 20));

        botonEnfermedadEpicrisisInternacion.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonEnfermedadEpicrisisInternacion.setForeground(Fuente.COLOR_NORMAL);
        botonEnfermedadEpicrisisInternacion.setText("Enfermedad");
        botonEnfermedadEpicrisisInternacion.setToolTipText("Seleccione la enfermedad asociada según el estandar Cie9MC");
        botonEnfermedadEpicrisisInternacion.setPreferredSize(new java.awt.Dimension(135, 20));
        botonEnfermedadEpicrisisInternacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEnfermedadEpicrisisInternacionActionPerformed(evt);
            }
        });

        nombreEnfermedadEpicrisisInternacion.setFont(Fuente.FUENTE_LABEL);
        nombreEnfermedadEpicrisisInternacion.setForeground(Fuente.COLOR_NORMAL);
        nombreEnfermedadEpicrisisInternacion.setPreferredSize(new java.awt.Dimension(620, 20));

        textoInformacionComplementariaEpicrisisInternacion.setFont(Fuente.FUENTE_LABEL);
        textoInformacionComplementariaEpicrisisInternacion.setForeground(Fuente.COLOR_NORMAL);
        textoInformacionComplementariaEpicrisisInternacion.setText("Información complementaria");
        textoInformacionComplementariaEpicrisisInternacion.setPreferredSize(new java.awt.Dimension(230, 20));

        informacionComplementariaEpicrisisInternacionScrollPanel.setPreferredSize(new java.awt.Dimension(760, 455));

        informacionComplementariaEpicrisisInternacion.setColumns(2);
        informacionComplementariaEpicrisisInternacion.setFont(Fuente.FUENTE_TEXTFIELD);
        informacionComplementariaEpicrisisInternacion.setForeground(Fuente.COLOR_NORMAL);
        informacionComplementariaEpicrisisInternacion.setLineWrap(true);
        informacionComplementariaEpicrisisInternacion.setRows(2);
        informacionComplementariaEpicrisisInternacion.setWrapStyleWord(true);
        informacionComplementariaEpicrisisInternacionScrollPanel.setViewportView(informacionComplementariaEpicrisisInternacion);

        javax.swing.GroupLayout panelEpicrisisLayout = new javax.swing.GroupLayout(panelEpicrisis);
        panelEpicrisis.setLayout(panelEpicrisisLayout);
        panelEpicrisisLayout.setHorizontalGroup(
            panelEpicrisisLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEpicrisisLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelEpicrisisLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(informacionComplementariaEpicrisisInternacionScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 984, Short.MAX_VALUE)
                    .addGroup(panelEpicrisisLayout.createSequentialGroup()
                        .addComponent(textoHoraYFechaEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(horaEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(fechaEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 252, Short.MAX_VALUE)
                        .addComponent(textoApellidoNombreProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(textoInformacionComplementariaEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(panelEpicrisisLayout.createSequentialGroup()
                        .addComponent(botonEnfermedadEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(nombreEnfermedadEpicrisisInternacion, javax.swing.GroupLayout.DEFAULT_SIZE, 845, Short.MAX_VALUE)))
                .addContainerGap())
        );
        panelEpicrisisLayout.setVerticalGroup(
            panelEpicrisisLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEpicrisisLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelEpicrisisLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(textoHoraYFechaEpicrisisInternacion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(horaEpicrisisInternacion)
                    .addComponent(textoApellidoNombreProfesional, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(fechaEpicrisisInternacion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(panelEpicrisisLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botonEnfermedadEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombreEnfermedadEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(textoInformacionComplementariaEpicrisisInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(informacionComplementariaEpicrisisInternacionScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 519, Short.MAX_VALUE)
                .addContainerGap())
        );

        JSpinner.DateEditor horaDeEnfermedad = new JSpinner.DateEditor(horaEpicrisisInternacion, "HH:mm:ss");
        horaEpicrisisInternacion.setEditor(horaDeEnfermedad);

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega la  información de la epicrisis");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(panelEpicrisis, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.DEFAULT_SIZE, 836, Short.MAX_VALUE)
                        .addGap(168, 168, 168))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelEpicrisis, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_botonCancelarActionPerformed
//GEN-FIRST:event_botonEnfermedadPersonalActionPerformed
//GEN-LAST:event_botonEnfermedadPersonalActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        agregarOModificarEpicrisisInternacion();

    }//GEN-LAST:event_botonAceptarActionPerformed

    private void botonEnfermedadEpicrisisInternacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEnfermedadEpicrisisInternacionActionPerformed
        cargarCie9mc();
    }//GEN-LAST:event_botonEnfermedadEpicrisisInternacionActionPerformed
   
    /**
     * Obtiene una enfermedad del listado de Cie9mc o de las propias enfermedades
     * del paciente.
     *
     */
    public void cargarCie9mc() {
        if (botonEnfermedadEpicrisisInternacion.isEnabled()) {
            RestriccionAcceso.GestionCie9mcPresentacion(null, true, true, false);

            //Completa el campo con la enfermedad seleccionada
            Cie9mc cie9mcSeleccionadoDeTabla =
                    GestionCie9mcPresentacion.getCie9mcSeleccionado();

            //Setea la enfermedad seleccionada
            cie9mcSeleccionado = cie9mcSeleccionadoDeTabla;
            if(cie9mcSeleccionadoDeTabla != null){
                nombreEnfermedadEpicrisisInternacion.setText("(" +
                    cie9mcSeleccionadoDeTabla.getCodigoCie9mc() + ") " +
                    cie9mcSeleccionadoDeTabla.getDetalleCie9mc());
            }
            nombreEnfermedadEpicrisisInternacion.setToolTipText(
                    nombreEnfermedadEpicrisisInternacion.getText());
        }
    }

    /**
     * Agrega/modifica la epicrisis de la internación.
     *
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    private void agregarOModificarEpicrisisInternacion() {
        //Valida todos los datos ingresados
        if (validarCampos()) {
            if(CapaPresentacion.confirmarModificacion("epicrisis", "la")){
                //Carga toda la información de la pantalla
                recopilarInformacion();
                int[] idEpicrisisInternacion = new int[1];
                if (CapaPresentacion.modoModificacion) {
                    //Modificación de epicrisisInternacion
                    idEpicrisisInternacion[0] =
                            diagnosticoYTriageInternacion.getEpicrisisInternacion().
                            getIdEpicrisisInternacion();
                } else {
                    //Alta de enfermedadYDiagnosticoAmbulatorio
                    idEpicrisisInternacion[0] = -1;
                }

                if (EpicrisisInternacionLogica.agregarEpicrisisInternacion(
                        datosEpicrisisInternacion, diagnosticoYTriageInternacion,
                        GestionPacientePresentacion.getPaciente(), idEpicrisisInternacion)) {
                    dispose();
                }
            }
        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }

    /**
     * Valida en conjunto todos los campos. Aquellos que son obligatorios y los
     * que no.
     *
     * @return true si el objeto está listo para cargarse, false en caso
     * contrario
     */
    private boolean validarCampos() {
        boolean esHoraYFechaValida = validarHoraYFecha();
        boolean esEnfermedadValida = validarEnfermedad();
        boolean esDiagnosticoValida = validarDiagnostico();

        return (esHoraYFechaValida && esEnfermedadValida && esDiagnosticoValida);
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarInformacion() {
        datosEpicrisisInternacion = new Object[6];

        datosEpicrisisInternacion[
                CapaLogica.EPICRISIS_INTERNACION_HORA] =
                CapaLogica.separarTiempo(horaEpicrisisInternacion.
                getValue().toString());

        datosEpicrisisInternacion[
                CapaLogica.EPICRISIS_INTERNACION_FECHA] =
                fechaEpicrisisInternacion.getDate();

        datosEpicrisisInternacion[
                CapaLogica.EPICRISIS_INTERNACION_CIE9MC] =
                cie9mcSeleccionado;

        datosEpicrisisInternacion[
                CapaLogica.EPICRISIS_INTERNACION_NOMBRE_PROFESIONAL] =
                MenuPrincipal.usuarioActivo.getPersona().getNombrePersona();

        datosEpicrisisInternacion[
                CapaLogica.EPICRISIS_INTERNACION_APELLIDO_PROFESIONAL] =
                MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona();

        datosEpicrisisInternacion[
                CapaLogica.
                EPICRISIS_INTERNACION_INFORMACION_COMPLEMENTARIA] =
                informacionComplementariaEpicrisisInternacion.getText();
    }

    /**
     * Valida los campos correspondiente a la fecha y hora.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarHoraYFecha() {
        if (!CapaValidacion.validarFecha(
                fechaEpicrisisInternacion.getDate(), "", true)) {
            textoHoraYFechaEpicrisisInternacion.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaEpicrisisInternacion.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            return false;
        } else {
            textoHoraYFechaEpicrisisInternacion.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaEpicrisisInternacion.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente a la enfermedad.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarEnfermedad() {
        //Manejo de la validación de la enfermedad
        if (!CapaValidacion.validarCampoObligatorio(
                nombreEnfermedadEpicrisisInternacion.getText())) {
            botonEnfermedadEpicrisisInternacion.setForeground(
                    Fuente.COLOR_ERROR);
            botonEnfermedadEpicrisisInternacion.setToolTipText(InformeError.
                    INFORME_ERROR_ENFERMEDAD_AMBULATORIO_NOMBRE_CIE9M_ENFERMEDAD_SELECCION_BOTON);
            return false;
        } else {
            botonEnfermedadEpicrisisInternacion.setForeground(
                    Fuente.COLOR_NORMAL);
            botonEnfermedadEpicrisisInternacion.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente al diagnóstico
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarDiagnostico() {
        //Manejo de la validación del diagnóstico
        if (!CapaValidacion.validarCampoObligatorio(
                informacionComplementariaEpicrisisInternacion.getText())) {
            textoInformacionComplementariaEpicrisisInternacion.setForeground(
                    Fuente.COLOR_ERROR);
            textoInformacionComplementariaEpicrisisInternacion.setToolTipText(
                    InformeError.INFORME_ERROR_EPICRISIS_INTERNACION_INFORMACION_COMPLEMENTARIA);
            return false;
        } else {
            textoInformacionComplementariaEpicrisisInternacion.setForeground(
                    Fuente.COLOR_NORMAL);
            textoInformacionComplementariaEpicrisisInternacion.setToolTipText(null);
            return true;
        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    agregarOModificarEpicrisisInternacion();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventosr
        ((DefaultEditor) horaEpicrisisInternacion.getEditor()).
                getTextField().addKeyListener(keyListenerEnter);
        ((DefaultEditor) horaEpicrisisInternacion.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaEpicrisisInternacion.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaEpicrisisInternacion.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);

        informacionComplementariaEpicrisisInternacion.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
        botonEnfermedadEpicrisisInternacion.addKeyListener(keyListenerEscape);
    }

    public static Cie9mc getCie9mcSeleccionado() {
        return cie9mcSeleccionado;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonEnfermedadEpicrisisInternacion;
    private com.toedter.calendar.JDateChooser fechaEpicrisisInternacion;
    private javax.swing.JSpinner horaEpicrisisInternacion;
    private javax.swing.JTextArea informacionComplementariaEpicrisisInternacion;
    private javax.swing.JScrollPane informacionComplementariaEpicrisisInternacionScrollPanel;
    private javax.swing.JLabel nombreEnfermedadEpicrisisInternacion;
    private javax.swing.JPanel panelEpicrisis;
    private javax.swing.JLabel textoApellidoNombreProfesional;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoHoraYFechaEpicrisisInternacion;
    private javax.swing.JLabel textoInformacionComplementariaEpicrisisInternacion;
    // End of variables declaration//GEN-END:variables
    private DiagnosticoYTriageInternacion diagnosticoYTriageInternacion;
    private Object[] datosEpicrisisInternacion;
    private static Cie9mc cie9mcSeleccionado;
}
